## 第13课 自动避障智能车

### （1）项目介绍：

在上课程中，我们制作了一个跟随智能车。实际上，利用同样的电子元件，同样的接线方法，我们只需要更改一个测试代码就可以将跟随智能车变为避障智能车。

### （2）流程图：

避障智能车具体逻辑如下表格。

| 检测 | 左边障碍物距离 | distance_l（单位：cm） | distance_l（单位：cm） |
| --- | --- | --- | --- |
| 检测 | 右边障碍物距离 | distance_r（单位：cm） | distance_r（单位：cm） |
| 检测 | 中间障碍物距离 | distance（单位：cm） | distance（单位：cm） |
| 条件 | 条件 | 条件 | 状态 |
| 0<distance<20 | 0<distance<20 | distance_l > distance_r 如果左边大于右边 | 向左转 |
| 0<distance<20 | 0<distance<20 | distance_l<=distance_r 如果左边不大于右边 | 向右转 |
| distance>=20 | distance>=20 | 前进 | 前进 |

使用的电子元件，接线方法和课程四一样，更换测试代码，运行，确保智能车能够实    现理想中的功能。

### （3）接线图：超声波模块+电机+舵机

![](media/image1.png)

接线注意：A、B两电机分别对应的连接电机驱动扩展板上的接口A和接口B；超声波传感器模块的V引脚至V，T（Trig）引脚至数字12(S)，E（Echo）引脚至数字13(S)，G引脚至G；电源接到BAT接口，舵机S接D10。

### （4）测试代码

在事件栏拖出Arduino启动模块

![](media/image2.png)

在变量类型栏拖出声明全局变量模块定义distance、distance_R、distance_L三个变量

![](media/image3.png)

设置舵机初始化为90度

![](media/image4.png)

初始化点阵

![](media/image5.png)

在控制栏拖出重复执行模块

![](media/image6.png)

将超声波的值赋值给distance

![](media/image7.png)

在控制栏拖出如果...否则模块，判断distance是否大于0且小于20

![](media/image8.png)

小车停止，点阵显示“STOP”延时100ms

![](media/image9.png)

舵机转向180度，延时500ms，然后将超声波的值赋值给distance_L,延时100ms

![](media/image10.png)

舵机转向0度，延时500ms，然后将超声波的值赋值给distance_R,延时100ms

![](media/image11.png)

在控制栏拖出如果...否则模块，判断distance_L是否大于distance_R，如果是则执行左转代码，点阵显示向左箭头，延时100ms，舵机转回90度，点阵显示向前箭头（由于箭头在封装成代码块的时候是面向自己的，所以左右箭头刚好相反）

![](media/image12.png)

如果distance_L不大于distance_R那么执行右转代码，点阵显示向右箭头，延时100ms，舵机转回90度，点阵显示向前箭头（由于箭头在封装成代码块的时候是面向自己的，所以左右箭头刚好相反）

![](media/image13.png)

如果以上条件都不满足则执行前进代码，点阵显示向前箭头

![](media/image14.png)

**完整代码：**

![](media/image15.png)

![](media/image16.png)

![](media/image17.png)

![](media/image18.png)

### （5）测试结果

将驱动扩展板堆叠在UNO Plus板上，上传好代码，按照课程三接线图接线，将拨码开关拨至ON端后，智能车能够自动避开障碍物行走。